"""

滑动
定位控件元素  才能进行滑动
目的
网页会进行验证
滑动的情况    一滑到底  运气好    还能进行控件定位
滑动的情况    滑动到指定的位置，拼图没有  (控件元素 )难度高


案例
进入铁总 输入账户密码  点击登录   进行滑动

导入动作链方法

1输入账户密码
2点击登录
3进行滑动     会出现进行检测   目的学习参考 了解如何滑动


定位的重点  发现多次调试的标签发生变化   以 第一次进入页面看到地为准
"""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
# 动作链方法
from selenium.webdriver import ActionChains


url="https://kyfw.12306.cn/otn/resources/login.html"

options=webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches',['enable-automation'])
# 实例化浏览器对象
driver=webdriver.Chrome(executable_path=r'D:\六星教育\2203期\2022_3_python\13.selenium使用2\chromedriver.exe',options=options)


driver.get(url)

#     窗口最大化
driver.maximize_window()
time.sleep(3)
#     定位登陆的元素
username=driver.find_element(By.XPATH,'//*[@id="J-userName"]')
# 输入账户
username.send_keys("18888888888")
time.sleep(2)
#     定位密码元素
password=driver.find_element(By.XPATH,'//*[@id="J-password"]')
# 输入密码
password.send_keys("797979")
time.sleep(2)
#     点击登录的标签
click_=driver.find_element(By.XPATH,'//*[@id="J-login"]')
# 点击登录
click_.click()
time.sleep(2)

# 定位滑动标签  更换方法 进行定位
action=driver.find_element(By.ID,'nc_1_n1z')
# 指定动作链对象  需要传入浏览器对象
action_chains=ActionChains(driver)
# 通过动作链对象点住标签并且等待执行
action_chains.click_and_hold(action).perform()
# 滑动的单位都是像素   因此要计算 像素的总量300像素 分段滑行    (左边控制滑动的距离,右边控制滑动的幅度)
ActionChains(driver).click_and_hold(action).move_by_offset(35, 33).perform()
ActionChains(driver).click_and_hold(action).move_by_offset(35, 27).perform()
ActionChains(driver).click_and_hold(action).move_by_offset(77, 50).perform()
ActionChains(driver).click_and_hold(action).move_by_offset(13, 38).perform()
ActionChains(driver).click_and_hold(action).move_by_offset(80, 30).perform()
# 滑动完了以后 要加上一步    release   以后不用进行 perform()
ActionChains(driver).click_and_hold(action).move_by_offset(15,18).release()
driver.close()
driver.quit()









